package org.example;

import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.FileOutputStream;
import java.io.IOException;

public class ExcelMergeExample {

    public static void main(String[] args) {
        try {
            // 1. 创建工作簿和工作表
            Workbook workbook = new XSSFWorkbook();
            Sheet sheet = workbook.createSheet("合并单元格示例");

            // 2. 创建标题行并合并单元格
            createMergedTitle(workbook, sheet, "销售报表（2025）", 0, 0, 2);

            // 3. 保存Excel文件
            try (FileOutputStream fos = new FileOutputStream("合并单元格示例.xlsx")) {
                workbook.write(fos);
                System.out.println("Excel文件创建成功！");
            }

            // 4. 关闭工作簿
            workbook.close();
        } catch (IOException e) {
            System.err.println("操作Excel时出错: " + e.getMessage());
            e.printStackTrace();
        }
    }

    /**
     * 创建合并的标题单元格
     * @param workbook 工作簿对象
     * @param sheet 工作表对象
     * @param titleText 标题文本
     * @param rowNum 行号
     * @param firstCol 起始列号
     * @param lastCol 结束列号
     */
    private static void createMergedTitle(Workbook workbook, Sheet sheet,
                                          String titleText, int rowNum,
                                          int firstCol, int lastCol) {
        // 创建行
        Row titleRow = sheet.createRow(rowNum);

        // 创建第一个单元格并设置值
        Cell titleCell = titleRow.createCell(firstCol);
        titleCell.setCellValue(titleText);

        // 合并单元格
        sheet.addMergedRegion(new CellRangeAddress(rowNum, rowNum, firstCol, lastCol));

        // 创建样式
        CellStyle titleStyle = workbook.createCellStyle();
        titleStyle.setAlignment(HorizontalAlignment.CENTER);
        titleStyle.setVerticalAlignment(VerticalAlignment.CENTER);

        // 设置字体
        Font titleFont = workbook.createFont();
        titleFont.setFontHeightInPoints((short)14);
        titleFont.setBold(true);
        titleStyle.setFont(titleFont);

        // 应用样式
        titleCell.setCellStyle(titleStyle);

        // 创建合并区域内的其他空白单元格（避免某些Excel版本的显示问题）
        for (int i = firstCol + 1; i <= lastCol; i++) {
            titleRow.createCell(i);
        }
    }
}